PCA主成分分析面试整理

1. PCA 介绍

PCA:Principal components analysis,是一种非监督降维方法。顾名思义,就是找出数据最主要的方面,来代替原是的数据。比如以前的数据是 m 维的,现在将它降成 n 维。希望降维之后,损失最小,也可以理解成希望降维之后的数据能够尽可能的代表原始数据集。

2. PCA 的两种解释性:

  1. 最近重构性

    希望降维之后的数据与降维之后的数据的差异最小

  2. 最大可分性

    所有样本点的投影能尽可能的分开,也即是使投影子后的样本点方差最大化

3. PCA如何求解

  1. 先进行中心化:

    比如数据是 10 维的,一共有100个样本,那么数据 X 就是 (100, 10) 的矩阵,对这 10 列矩阵分别求出均值,然后让这一列的数据都减去均值。得到的数据 X‘ 就是以均值为 0 的数据

  2. 求 X’ 的协方差矩阵:

    协方差矩阵的维度是 (10, 10),而且是一个对角矩阵,其中元素 (i, j) 表示,第 i 列与第 j 列之间的协方差,如何求:X‘ 中第 i 列向量与第 j 列向量的内积(因为每一列的均值均为0,所以不用减均值,就直接计算内积就好。如果这里用核函数来代替内积的话,就叫做 Kernel PCA,这个时候就是不存在线性的超平面来对数据进行投影,思想类似 SVM)。

    协方差 $cov(X, Y) = E((X - \mu)(Y-v))$ 表示的是,两个变量同时变化的变化程度:如果 x 与 y 之间的协方差大于 0,表示若 x 增加了,则 y 也会增加;如果 x 与 y 之间的协方差小于 0,表示若 x 增加了,则 y 会减少。如果 x 与 y 之间是独立的,则 x 与 y 之间的协方差为 0(但是协方差为 0,不能说明 x 与 y 是独立的)。协方差越大,表示两者对彼此的影响越大。

  3. 求协方差矩阵的特征值和特征向量,然后对协方差矩阵进行特征值分解

    什么是特征值分解?

    $A = Q \Sigma Q^{-1}$ ,其中,Q 就是特征向量组成的矩阵,Q 的每一列都是特征向量;$\Sigma$ 是一个对角矩阵,对角线上面的元素都是特征值,与 Q 中的特征向量是一一对应的

  4. 对 $\Sigma$ 中的特征值进行排序,Q 中的特征向量也进行相应的改变。取出最大的 d’ 个特征值所对应的特征向量 $w_1, w_2, …, w_{d’}$.

    最后就得到投影矩阵 $W = (w_1, w_2, …, w_{d’})$ .

    假设这里 d‘ = 6,则 W 矩阵的维度就是 (10, 6) .

  5. 将样本投影到选取的投影矩阵 W 上面

    降维之后的数据:X*W,就是 (100, 6) 维的

4. 降维之后的维度怎么确定

  1. 可以利用交叉验证,再选择一个很简单的分类器,来选择比较好的 k‘ 的值

  2. 可以设置一个比重阈值 t,比如 95%,然后选择满足阈值的最小的 k‘:

    $$\frac {\sum _{i=1}^{d’}\lambda_i}{\sum _{i=1}^d\lambda_i} \ge t$$

5. PCA 算法总结

PCA 是一种非监督降维方法,它只需要特征值分解,就可以对数据进行降维,去躁。

主要优点:

  1. 仅仅需要以方差衡量信息量,不受数据集以外的因素影响
  2. 各主成分之间蒸饺,可消除原始数据成分间的相互影响的因素
  3. 计算方法简单,主要运算是特征值分解,易于实现。

主要缺点:

  1. 主成分各个特征维度的含义具有一定的模型心各,不如原始样本特征的解释性强
  2. 方差小的非主成分也可能含有对样本差异的重要信息,因此降维丢弃可能对后续数据处理有影响

补充:

SVD 奇异值分解,与 PCA 类似,前者是对原始数据进行奇异值分解,后者是为原始数据进行特征值分解

Reference

https://www.cnblogs.com/pinard/p/6239403.html

https://blog.csdn.net/zhongkelee/article/details/44064401

http://blog.codinglabs.org/articles/pca-tutorial.html